package tw.rescue.dao;

import java.util.Date;
import java.util.List;
import tw.rescue.slim3.model.GuestBookMessage;

public interface GuestBookDao<K, Q> {
	/**
	 * 張貼新留言
	 * @param message
	 */
	public void newMessage(GuestBookMessage message);

	/**
	 * 回覆留言
	 * @param replyTargetKey
	 * @param message
	 */
	public void replyMessage(K replyToKey, GuestBookMessage message);

	/**
	 * 設定是否置頂
	 * @param key
	 * @param isTop
	 */
	public void topMessage(K key, boolean isTop);
	
	/**
	 * 設定是否標記保留
	 * @param key
	 * @param isMarked
	 */
	public void markMessage(K key, boolean isMarked);
	
	/**
	 * 刪除留言
	 * @param key
	 */
	public void deleteMessage(K key);
	
	/**
	 * 
	 * @param category
	 * @param count
	 * @return
	 */
	public List<GuestBookMessage>queryMessage(String category, int from, int count);
	
	/**
	 * 依分類查詢留言主鍵值，從第一筆起讀取 count 筆留言內容，count<=1000，回傳 query state
	 * @param category
	 * @param count
	 * @return
	 */
	public Q queryMessages(String category, int count);
	
	/**
	 * 依分類查詢留言主鍵值，以相同於上次 queryState 之查詢繼續讀取 count 筆留言內容，count<=1000
	 * @param category
	 * @param queryState
	 * @param count
	 * @return
	 */
	public Q queryMessages(String category, Q queryState, int count);
	
	/**
	 * 依分類及日期查詢留言主鍵值，最多回傳1000筆
	 * @param from
	 * @param to
	 * @return
	 */
	public List<K>queryMessageKeys(String category, Date from, Date to);
	
	/**
	 * 讀取 keys 所代表的留言內容
	 * @param keys
	 * @return
	 */
	public List<GuestBookMessage>fetchMessages(List<K>keys);
	
	/**
	 * 讀取主鍵值所對應的留言內容
	 * @param key
	 * @return
	 */
	public GuestBookMessage getMessage(K key);
}
